package fr.gestproj.service;

import java.lang.reflect.Field;
import java.util.Calendar;

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.inject.Inject;

import fr.gestproj.commun.annotation.FieldCrudReferentiel;
import fr.gestproj.facade.UtilisateurFacade;
import fr.gestproj.model.Profil;
import fr.gestproj.model.Role;
import fr.gestproj.model.Utilisateur;
import fr.gestproj.utils.UtilsAuthentication;
import fr.gestproj.utils.UtilsReflexivite;

/** @author Anne */
@Startup
@Singleton
public class ServiceStartup {

	@Inject
	private UtilisateurFacade utilisateurFacade;

	public ServiceStartup() {
	}

	@PostConstruct
	private void init() {
		createUsers();
		for (Field field : UtilsReflexivite.getFieldsByAnnotation(Utilisateur.class, FieldCrudReferentiel.class)) {
			System.out.println(field);
		}
	}

	private void createUsers() {
		Role role1 = new Role();
		role1.setCode("ROLE_ADMINISTRATION_UTILISATEUR");
		role1.setLibelle("Administration des utilisateurs");
		role1.setDescription("Permet d'administrer les utilisateurs");

		Role role2 = new Role();
		role2.setCode("ROLE_ADMINISTRATION_PROFIL");
		role2.setLibelle("Administration des profils");
		role2.setDescription("Permet d'administrer les profils");

		Profil profil1 = new Profil();
		profil1.setLibelle("Administrateur total");
		profil1.getListeRole().add(role1);
		profil1.getListeRole().add(role2);
		profil1.setControleTotal(true);

		Profil profil2 = new Profil();
		profil2.setLibelle("Administrateur utilisateur");
		profil2.getListeRole().add(role1);

		Profil profil3 = new Profil();
		profil3.setLibelle("Administrateur profil");
		profil3.getListeRole().add(role2);

		Utilisateur utilisateur1 = new Utilisateur();
		utilisateur1.setEmail("laurent.parrot78@gmail.com");
		utilisateur1.setNom("PARROT");
		utilisateur1.setPrenom("Laurent");
		utilisateur1.setDateCreation(Calendar.getInstance().getTime());
		utilisateur1.setPassword(UtilsAuthentication.chiffrerMotdepasse("Laurent1234*", utilisateur1.getDateCreation()));
		utilisateur1.setProfil(profil1);

		Utilisateur utilisateur2 = new Utilisateur();
		utilisateur2.setEmail("kestounet@gmail.com");
		utilisateur2.setNom("GUINCHARD");
		utilisateur2.setPrenom("Maxime");
		utilisateur2.setDateCreation(Calendar.getInstance().getTime());
		utilisateur2.setPassword(UtilsAuthentication.chiffrerMotdepasse("Maxime1234*", utilisateur2.getDateCreation()));
		utilisateur2.setProfil(profil2);

		utilisateurFacade.update(utilisateur1);
		utilisateurFacade.update(utilisateur2);
	}

}
